package desperte.aqui;

/*
 * GmapPointer.java
 * Purpose: Activity que dá acesso ao mapa do Google Maps
 * 
 * @author Thassio Carvalho <tvmcarvalho@gmail.com>
 * @revision 0.28 19/05/2012
 */

import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class GmapPointer extends MapActivity implements OnClickListener{
	
	/*Variáveis de instância*/
	LocationManager myLocationManager;
	LocationListener myLocationListener;
	MapView mapaconf;
	MapController mapControl;
	String Latitude = "", Longitude = "";	
	
	GeoPoint tapPos;
	long releaseTime=0;
	long pressTime=0;
	Button cancel;
		
	private boolean gps_enabled = false;
	private boolean network_enabled = false;
	
	/*
	 * (non-Javadoc)
	 * @see com.google.android.maps.MapActivity#onCreate(android.os.Bundle)
	 */
	public void onCreate(Bundle gmapstate){
		super.onCreate(gmapstate);
		
		//Layout onde está o mapa
		//Atribui a view 'mapa' à MapView 'mapaconf'
		//Setando o controle de zoom
		//Atribuindo os controles do 'mapaconf' ao 'mapContol'
		//Peso so zoom. ('1' é a vista do globo)
		setContentView(R.layout.gmappointer);
		mapaconf = (MapView)findViewById(R.id.mapa);
		mapaconf.setBuiltInZoomControls(true);
		mapControl = mapaconf.getController();
		mapControl.setZoom(14);
		
		Drawable drwbl = this.getResources().getDrawable(R.drawable.ic_launcher);
		List<Overlay> overlay = mapaconf.getOverlays();
		overlay.clear();
		GmapItemizedOverlay tItmoverlays = new GmapItemizedOverlay(drwbl, this);
		
		/*
		 * Adicionar os itens ao 'tItmoverlays' aqui.
		 * Ex: tItmoverlays.addoverlay(ITEM);
		 */
		
		overlay.add(tItmoverlays);
						
		myLocationManager = (LocationManager)this.getSystemService(Context.
				LOCATION_SERVICE);
		myLocationListener = new MyLocationListener();
		myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
													0, 0, myLocationListener);
		
		
		//Blocos 'try-catch' que recebem a disponibilidade dos provedores 
		//de geolocalização
		try{
			gps_enabled = myLocationManager.isProviderEnabled(LocationManager.
					GPS_PROVIDER);
		}
		catch(Exception e){
			}
		
		try {
			network_enabled = myLocationManager.isProviderEnabled(
					LocationManager.NETWORK_PROVIDER);
		} 
		catch (Exception e) {
			}
		
		//Laço que testa a disponibilidade dos provedores de geolocalização.
		if (!gps_enabled && !network_enabled) {
			
			Toast.makeText(this, "Os provedores de geolocalizaçao (GPS e Network) " +
					"estão desativados. Ative-os para utilizar o serviço.", Toast.
					LENGTH_LONG).show();
		}
		
		if(gps_enabled){
			myLocationManager.requestLocationUpdates(LocationManager.
					GPS_PROVIDER, 0, 0, myLocationListener);
			
	}
		
		if(network_enabled){
			myLocationManager.requestLocationUpdates(LocationManager.
					NETWORK_PROVIDER, 0, 0, myLocationListener);
			
		}
		//define 'mapaconf' como uma view habilitada a receber longo toque
		//Essa opção deverá ser retirada com a adição do overlay de gerência de
		//toques na tela
		mapaconf.setLongClickable(true);
		
		cancel = (Button)findViewById(R.id.map_activity_cancel_btn);
		cancel.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
		});
	}
	
	/*
	 * (non-Javadoc)
	 * @see com.google.android.maps.MapActivity#isRouteDisplayed()
	 */
	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
	
	/*
	 * (non-Javadoc)
	 * @see com.google.android.maps.MapActivity#onResume()
	 */
	@Override
	protected void onResume() {
		super.onResume();
		//Atualiza a posição atual no mapa
		//myloc.getMyLocation();
		/*Essa atualização é necessária para diminuir os gastos com bateria*/
	}

	/*
	 * (non-Javadoc)
	 * @see com.google.android.maps.MapActivity#onPause()
	 */
	protected void onPause() {
		super.onPause();
		//Desabilita a opção de mostrar a posição atual do dispositivo
		//myloc.disableMyLocation();
	}
	
	/*
	 * DOCUMENTA ESSA CLASSE PORRAA!!!
	 * 
	 * @author Thassio Carvalho <tvmcarvalho@gmail.com>
	 * 
	 */
	private class MyLocationListener implements LocationListener{
		/*
		 * (non-Javadoc)
		 * @see android.location.LocationListener#onLocationChanged(android.location.Location)
		 */
		@Override
		public void onLocationChanged(Location location) {
			// TODO Auto-generated method stub
			if(location != null){
				
				GeoPoint gpt = new GeoPoint((int)location.getLatitude(),
						(int)location.getLongitude());
				mapControl.animateTo(gpt);
				
			}
		}

		/*
		 * (non-Javadoc)
		 * @see android.location.LocationListener#onProviderDisabled(java.lang.String)
		 */
		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub
			
		}

		/*
		 * (non-Javadoc)
		 * @see android.location.LocationListener#onProviderEnabled(java.lang.String)
		 */
		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub
			
		}

		/*
		 * (non-Javadoc)
		 * @see android.location.LocationListener#onStatusChanged(java.lang.String, int, android.os.Bundle)
		 */
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub
			
		}
		
	}

		/*
		 * (non-Javadoc)
		 * @see android.content.DialogInterface.OnClickListener#onClick(android.content.DialogInterface, int)
		 */
		@Override
		public void onClick(DialogInterface arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}
}